package Controller.Interface;


import Controller.Exceptions.ControllerPerformException;
import Model.PathFile;
/**
 * L'interface ReceivedInterface définie les methodes qui gèrent le 
 * l'envoi de signaux par le ChatControlleur 
 *  * 
 * <p>Certaines methodes définies dans l'interface UDPSenderInterface lèvent 
 * une exception de type  <tt>ControllerPerformException</tt>
 *
 * @author      Frank Djomo
 * @author      Christelle SIAGO HAPPI
 * @author      djomopoueme@gmail.com
 * @author      christelle.siagohappi@gmail.com
 * @version     1.0
 * @see     ControllerPerformException
 */
public interface PerformInterface  {
	
    /**
    * Gère la connexion d'un utilisateur local
    * @param login Login fourni par l'utilisateur
    * @throws ControllerPerformException
    */
    public void performConnect(String login) throws ControllerPerformException;
    /**
    * Gère la déconnexion de l'utilisateur local
    * @throws ControllerPerformException
    */
    public void performDisonnect()throws ControllerPerformException;
     /**
    * Gère l'envoi d'un message
    * @param remoteLogin Login de l'utilisateur distant à qui envoyer le message
    * @param messageText Message à envoyer
    * @throws ControllerPerformException
    */
    public void performChat(String remoteLogin,String messageText)throws ControllerPerformException;	
    /**
    * Gère l'envoi d'une demande de transfert de fichier
    * @param file Pathfile representant le fichier à transferer
    * @param remoteLogin Login de l'utilisateur distant à qui envoyer le message
    * @throws ControllerPerformException
    */
    public void performFileRequest(PathFile file ,String remoteLogin) throws ControllerPerformException;
     /**
    * Gère l'envoi d'une reponse de transfert de fichier
    * @param remoteLogin
    * @param accept <code>true</code> si demande accepté 
    *               <code>false</code> sinon
    * @throws ControllerPerformException
    */
    public void performFileResponse(String remoteLogin ,boolean accept) throws ControllerPerformException;
     /**
    * Gère l'envoi d'un wizz à un utilisateur distant
    * @param remoteLogin Login de l'utilisateur distant à qui envoyer le wizz
    * @throws ControllerPerformException
    */
    public void performWizzer(String remoteLogin)throws ControllerPerformException;
     /**
    * Gère l'envoi d'un changement de status
    * @param show Status de l'utilisateur
    * @throws ControllerPerformException   
    */
    public void performStatus(String show) throws ControllerPerformException;
    /**
    * Gère l'envoi d'une notification d'ecriture 
    * @param remoteLogin  Login de l'utilisateur distant à qui envoyer la notification
    * @param isWriting   <code>true</code> si utilisateur ecrit 
    *                    <code>false</code> sinon
    * @throws ControllerPerformException
    */
    public void performComposing(String remoteLogin,boolean isWriting ) throws ControllerPerformException;

}
